#!/bin/bash

# BabyTapMobile 构建和安装脚本
# 使用方法: ./build-and-install-babytapmobile.sh [--build-only] [--install-only]

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 解析命令行参数
BUILD_ONLY=false
INSTALL_ONLY=false
PRESERVE_DATA=true  # 默认保留数据

while [[ $# -gt 0 ]]; do
    case $1 in
        --build-only)
            BUILD_ONLY=true
            shift
            ;;
        --install-only)
            INSTALL_ONLY=true
            shift
            ;;
        --clean-install)
            PRESERVE_DATA=false
            shift
            ;;
        --help|-h)
            echo "🚀 BabyTapMobile 构建和安装脚本"
            echo "================================"
            echo ""
            echo -e "${BLUE}使用方法:${NC}"
            echo "  $0 [选项]"
            echo ""
            echo -e "${BLUE}选项:${NC}"
            echo "  --build-only      仅构建 APK 文件"
            echo "  --install-only    仅安装 APK 文件（默认保留数据）"
            echo "  --clean-install   清理安装（删除所有应用数据）"
            echo "  --help, -h        显示此帮助信息"
            echo ""
            echo -e "${BLUE}示例:${NC}"
            echo "  $0                构建并安装（默认保留数据）"
            echo "  $0 --build-only   仅构建 APK"
            echo "  $0 --install-only 仅安装 APK（保留数据）"
            echo "  $0 --clean-install 清理安装（删除数据）"
            echo ""
            echo -e "${BLUE}数据保留策略:${NC}"
            echo "  - 默认行为：保留所有应用数据"
            echo "  - 使用 --clean-install 删除数据"
            echo "  - 开发时建议使用默认选项"
            exit 0
            ;;
        *)
            echo -e "${RED}❌ 未知参数: $1${NC}"
            echo "使用方法: $0 [--build-only] [--install-only] [--clean-install]"
            exit 1
            ;;
    esac
done

echo -e "${BLUE}🚀 BabyTapMobile 构建和安装脚本${NC}"
echo "================================"

# 检查是否在正确的目录
if [ ! -d "BabyTapMobile" ]; then
    echo -e "${RED}❌ 错误: 请在项目根目录运行此脚本${NC}"
    exit 1
fi

# 构建函数
build_babytapmobile() {
    echo -e "${BLUE}📁 进入 BabyTapMobile 目录...${NC}"
    cd BabyTapMobile

    # 1. 构建 Go 服务器
    echo -e "${BLUE}🔧 步骤 1: 构建 Go 服务器...${NC}"
    if [ ! -d "baby-tap-server" ]; then
        echo -e "${RED}❌ 错误: baby-tap-server 目录不存在${NC}"
        exit 1
    fi

    cd baby-tap-server
    if ! ./build-mobile.sh; then
        echo -e "${RED}❌ Go 服务器构建失败${NC}"
        exit 1
    fi
    cd ..

    echo -e "${GREEN}✅ Go 服务器构建完成${NC}"

    # 2. 安装 Node.js 依赖
    echo -e "${BLUE}📦 步骤 2: 安装 Node.js 依赖...${NC}"
    if ! npm install; then
        echo -e "${RED}❌ Node.js 依赖安装失败${NC}"
        exit 1
    fi

    echo -e "${GREEN}✅ Node.js 依赖安装完成${NC}"

    # 3. 构建 Android APK
    echo -e "${BLUE}📱 步骤 3: 构建 Android APK...${NC}"
    cd android
    if ! ./gradlew assembleRelease; then
        echo -e "${RED}❌ Android APK 构建失败${NC}"
        exit 1
    fi
    cd ..

    echo -e "${GREEN}✅ Android APK 构建完成${NC}"

    # 4. 复制 APK 到根目录
    echo -e "${BLUE}📋 步骤 4: 复制 APK 文件...${NC}"
    cp android/app/build/outputs/apk/release/app-release.apk ../BabyTapMobile-release.apk

    # 5. 显示构建结果
    echo ""
    echo -e "${GREEN}🎉 构建完成！${NC}"
    echo "================================"
    echo -e "${BLUE}📱 APK 文件: ../BabyTapMobile-release.apk${NC}"
    echo -e "${BLUE}📊 文件大小: $(du -h ../BabyTapMobile-release.apk | cut -f1)${NC}"
    
    cd ..
}

# 安装函数
install_babytapmobile() {
    # 检查 APK 文件是否存在
    if [ ! -f "BabyTapMobile-release.apk" ]; then
        echo -e "${RED}❌ 错误: BabyTapMobile-release.apk 文件不存在${NC}"
        echo "请先运行构建命令生成 APK"
        exit 1
    fi

    echo -e "${BLUE}📱 找到 APK 文件: BabyTapMobile-release.apk${NC}"
    echo -e "${BLUE}📊 文件大小: $(du -h BabyTapMobile-release.apk | cut -f1)${NC}"

    # 检查设备连接
    echo -e "${BLUE}🔍 检查设备连接...${NC}"
    if ! adb devices | grep -q "device$"; then
        echo -e "${RED}❌ 错误: 没有找到已连接的 Android 设备${NC}"
        echo "请确保设备已连接并启用了 USB 调试"
        exit 1
    fi

    echo -e "${GREEN}✅ 设备已连接:${NC}"
    adb devices | grep "device$"

    # 处理旧版本
    if [ "$PRESERVE_DATA" = true ]; then
        echo -e "${YELLOW}📦 保留数据模式：使用 -r 参数重新安装...${NC}"
        echo -e "${BLUE}💡 这将保留应用数据，但可能需要手动处理数据兼容性${NC}"
    else
        echo -e "${YELLOW}🧹 清理安装模式：卸载旧版本（如果存在）...${NC}"
        echo -e "${RED}⚠️  警告：这将删除所有应用数据！${NC}"
        adb uninstall com.babytapmobile 2>/dev/null || echo "没有找到旧版本"
    fi

    # 安装新版本
    echo -e "${BLUE}📦 安装 BabyTapMobile...${NC}"
    if [ "$PRESERVE_DATA" = true ]; then
        # 保留数据模式：使用 -r 参数重新安装
        if adb install -r BabyTapMobile-release.apk; then
            echo -e "${GREEN}✅ 安装成功！${NC}"
            echo ""
            echo -e "${GREEN}🎉 BabyTapMobile 已安装完成${NC}"
            echo -e "${BLUE}📱 请在设备上打开应用${NC}"
            echo -e "${BLUE}🔔 首次启动时会请求通知权限${NC}"
            echo -e "${BLUE}🌐 应用会自动启动前台服务${NC}"
        else
            echo -e "${RED}❌ 安装失败${NC}"
            exit 1
        fi
    else
        # 正常安装模式
        if adb install BabyTapMobile-release.apk; then
            echo -e "${GREEN}✅ 安装成功！${NC}"
            echo ""
            echo -e "${GREEN}🎉 BabyTapMobile 已安装完成${NC}"
            echo -e "${BLUE}📱 请在设备上打开应用${NC}"
            echo -e "${BLUE}🔔 首次启动时会请求通知权限${NC}"
            echo -e "${BLUE}🌐 应用会自动启动前台服务${NC}"
        else
            echo -e "${RED}❌ 安装失败${NC}"
            exit 1
        fi
    fi
}

# 主逻辑
if [ "$BUILD_ONLY" = true ]; then
    echo -e "${BLUE}🔧 仅构建模式${NC}"
    build_babytapmobile
elif [ "$INSTALL_ONLY" = true ]; then
    echo -e "${BLUE}📦 仅安装模式${NC}"
    install_babytapmobile
else
    echo -e "${BLUE}🔧 完整构建和安装模式${NC}"
    build_babytapmobile
    echo ""
    echo -e "${BLUE}📦 开始安装...${NC}"
    install_babytapmobile
fi

echo ""
echo -e "${BLUE}💡 使用提示:${NC}"
echo "  - 确保授予通知权限"
echo "  - 查看通知栏确认服务运行状态"
echo "  - 其他设备可通过局域网访问 API"
echo "  - 使用 ./example/udp-discovery-test 测试设备发现"
echo ""
echo -e "${BLUE}🔧 其他选项:${NC}"
echo "  $0 --build-only      # 仅构建 APK"
echo "  $0 --install-only    # 仅安装 APK（默认保留数据）"
echo "  $0 --clean-install   # 清理安装（删除所有数据）"
echo "  $0                   # 构建并安装（默认保留数据）" 